package ar.com.sne.model.bo.dom;

import java.math.BigDecimal;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.apache.log4j.Logger;

import ar.com.sne.bean.BaseBO;
import ar.com.sne.model.dao.factory.DomDAOFactory;

/**
 * DomCDP
 * Clase encargada de encapsular la logica de negocio de las Carta de Porte.
 */

@Entity
@Table(name = "DOM_CDP", catalog = "sneweb")
public class DomCDP extends BaseBO {

	private DomMercaderia domMercaderiasByIdGrano;
	private DomMercaderia domMercaderiasByIdRemCom;
	private DomMercaderia domMercaderiasByIdEntregador;
	private DomMercaderia domMercaderiasByIdCorredor;
	private DomMercaderia domMercaderiasByIdConductor;
	private DomMercaderia domMercaderiasByIdTitular;
	private DomMercaderia domMercaderiasByIdIntermediario;
	private String ctg;
	private String cot;
	private BigDecimal kg;
	
	@Transient
	Logger log = Logger.getLogger(DomCDP.class);
	
	/*
	 * Contructores 
	 */
	
	public DomCDP() {
		super();
	}

	/*
	 * Getter & Listters
	 */
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_grano", nullable = false)
	public DomMercaderia getDomMercaderiasByIdGrano() {
		return this.domMercaderiasByIdGrano;
	}

	public void setDomMercaderiasByIdGrano(
			DomMercaderia domMercaderiasByIdGrano) {
		this.domMercaderiasByIdGrano = domMercaderiasByIdGrano;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_rem_com", nullable = false)
	public DomMercaderia getDomMercaderiasByIdRemCom() {
		return this.domMercaderiasByIdRemCom;
	}

	public void setDomMercaderiasByIdRemCom(
			DomMercaderia domMercaderiasByIdRemCom) {
		this.domMercaderiasByIdRemCom = domMercaderiasByIdRemCom;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_entregador", nullable = false)
	public DomMercaderia getDomMercaderiasByIdEntregador() {
		return this.domMercaderiasByIdEntregador;
	}

	public void setDomMercaderiasByIdEntregador(
			DomMercaderia domMercaderiasByIdEntregador) {
		this.domMercaderiasByIdEntregador = domMercaderiasByIdEntregador;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_corredor", nullable = false)
	public DomMercaderia getDomMercaderiasByIdCorredor() {
		return this.domMercaderiasByIdCorredor;
	}

	public void setDomMercaderiasByIdCorredor(
			DomMercaderia domMercaderiasByIdCorredor) {
		this.domMercaderiasByIdCorredor = domMercaderiasByIdCorredor;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_conductor", nullable = false)
	public DomMercaderia getDomMercaderiasByIdConductor() {
		return this.domMercaderiasByIdConductor;
	}

	public void setDomMercaderiasByIdConductor(
			DomMercaderia domMercaderiasByIdConductor) {
		this.domMercaderiasByIdConductor = domMercaderiasByIdConductor;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_titular", nullable = false)
	public DomMercaderia getDomMercaderiasByIdTitular() {
		return this.domMercaderiasByIdTitular;
	}

	public void setDomMercaderiasByIdTitular(
			DomMercaderia domMercaderiasByIdTitular) {
		this.domMercaderiasByIdTitular = domMercaderiasByIdTitular;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_intermediario", nullable = false)
	public DomMercaderia getDomMercaderiasByIdIntermediario() {
		return this.domMercaderiasByIdIntermediario;
	}

	public void setDomMercaderiasByIdIntermediario(
			DomMercaderia domMercaderiasByIdIntermediario) {
		this.domMercaderiasByIdIntermediario = domMercaderiasByIdIntermediario;
	}

	@Column(name = "ctg", length = 15)
	public String getCtg() {
		return this.ctg;
	}

	public void setCtg(String ctg) {
		this.ctg = ctg;
	}

	@Column(name = "cot", length = 15)
	public String getCot() {
		return this.cot;
	}

	public void setCot(String cot) {
		this.cot = cot;
	}

	@Column(name = "kg", precision = 12, scale = 3)
	public BigDecimal getKg() {
		return this.kg;
	}

	public void setKg(BigDecimal kg) {
		this.kg = kg;
	}

	/*
	 * Metodos de Clase
	 */
	
	public static DomCDP getById(Long id){
		return (DomCDP) DomDAOFactory.getDomCDPDAO().getById(id);
	}
	
	public static DomCDP getByIdNull(Long id) {
		return (DomCDP) DomDAOFactory.getDomCDPDAO().getByIdNull(id);
	}
	
	public static List<DomCDP> getList() {
		return (List<DomCDP>) DomDAOFactory.getDomCDPDAO().getList();
	}
	
	public static List<DomCDP> getListActivos() {			
		return (List<DomCDP>) DomDAOFactory.getDomCDPDAO().getListActiva();
	}
}
